#include <iostream>
#include <list>  //list的头文件
using namespace std;

/*
	C++中的函数符(函数对象)包括如下几种情况
		第一种： 谓词函数 --》称作函数对象
		第二种： 自定义的类，重载了圆括号，该类的对象称作函数对象
		第三种： Lambda表达式：把我们写的谓词函数改写(按照Lambda表达式的规则改写)
*/

//函数符的第一种情况：类重载了圆括号，这个类的对象就具备了函数调用类似的写法
class Test
{
public:
	bool operator()(int &x) //参数类型必须跟你的容器类型保持一致
	{
		cout<<"参数x会自动帮你遍历容器l1里面的数据： "<<x<<endl;
		if(x>60)
			return true;
		else
			return false;
	}
};

//函数符的第二种情况：谓词函数
bool fun(int &x)  //一元谓词函数
{
	//我想删除容器中所有的奇数
	if(x%2==1)
		return true;
	else
		return false;
}

int main()
{
	//创建list对象
	list<int> l1={10,45,78,96};
	
	//第一种情况：类重载了圆括号
	//Test t1;
	//l1.remove_if(t1);
	
	//第二种情况：谓词函数
	//l1.remove_if(fun);
	
	//第三种情况：Lambda表达式(匿名函数)
	//l1.remove_if([](int &x){return x%2==0;});
	
	for(auto x:l1)
		cout<<"删除之后l1里面是: "<<x<<endl;
	

}